中国信通院唐浩等:分布式数据库技术及发展趋势研究
The following article is from 信息通信技术与政策 Author 唐浩,姜春宇 等
1 引言
数据库是高效组织、存储、管理数据的软件,是构建信息世界的基础工具。从第一款商业化关系数据库诞生开始,数据库管理系统已经走过40多年的历史,在发展过程中分化为面向事务处理和面向分析决策的数据库,在商业产品之外,诞生了开源的数据库,并逐渐成为一个主流方向。数据库管理系统起初都是单机形式,主要服务于银行、航空公司、宇航局等大型企业,2000年后随着在线业务的蓬勃发展,很多系统都面临处理高并发、大数据量、超高峰值等挑战,数据库开始了分布式之旅来应对这些挑战,这条路先从分析场景开始,然后扩展到事务处理领域。这两者面临的难度截然不同,分布式分析数据库主要解决海量数据的存储、查询分析的需求,主要是应对扩展性、高可用等挑战;而分布式事务数据库主要解决分布式事务的问题。
2 分布式数据库发展历程
20世纪80年代,伴随着关系数据库理论的诞生,BM和Oracle两家公司开始提供商业化的数据库产品,服务于各类大型企业。初期的数据库都是单机软件,跑在专有的硬件之上,比如IBM的大机、小型机,如果业务量或者数据量增加,只能进行垂直扩展,即采用增加CPU、存储的方式。这套体系的优点是非常稳定,缺点是开放性不够,与通用x86服务器体系之上的开发环境兼容性差,另外当业务量增长过快时,其扩展能力有限,而且这套系统的造价非常昂贵。
2000年以后,随着互联网在线业务的发展,业务系统访问的并发度呈指数级上升,海量数据计算和分析需求越来越普遍,传统单机系统在业务支撑、成本、开放性等方面均面临巨大挑战,数据库垂直扩展的模式也无法维系。以支付业务为例,随着在线购物、在线缴费方式的普及,支付业务系统的并发量迅速增长,尤其是在“双十一”“618”“春节抢红包”等场景下,每秒有上百万笔支付交易。互联网企业开始探索新的水平扩展的方案,最常见的就是应用系统通过分库分表进行解决。但是,这种解决方案的应用系统需要做大量改造,需要感知数据存储位置,增加了运维的复杂性,并因此出现了中间件的方式,如Mycat等。这种方式虽实现了数据对应用的透明,但未解决数据库运维的痛点。
随着大数据技术的发展,以Hadoop、Greenplum为代表的非结构化大规模数据处理技术崛起,这些技术主要采用Shared-nothing架构,在分析领域率先实现了分布式的扩展,分析的主要任务是数据的查询,其应对的挑战主要是海量数据的存储、计算,对于事务的要求较低。2010年后,谷歌Spanner、Tidb采用Paxos或Raft等一致性协议来解决中间件方案的单点瓶颈问题,这为事务数据库的分布式化提供了新的理论依据。
3 分布式数据库核心技术
分布式数据库是指数据在物理上分布而在逻辑上集中管理的数据库系统。分布式数据库的主要特点有3个:一是透明性。对于用户来说,分布式数据库相当于一个单机数据库,屏蔽了底层多节点、数据物理分散、副本一致性等细节问题;二是数据冗余性。分布式数据库通过多副本来实现系统可靠性和可用性,当某一节点中的数据不可用时,其他数据副本可以继续保证业务的连续性,还可以对数据就近计算,减少网络消耗,提升性能;三是易扩展性。分布式数据库能够通过水平扩展来提升整体的处理能力,数据可以被动态地分布到新增节点之上,消除数据倾斜。分布式数据库的核心技术包括数据复制,即不同副本之间的数据同步机制;数据分区,即如何将海量数据分布到不同节点中;分布式事务,即解决多节点面临的原子性、一致性、隔离性、持久性挑战。
3.1 数据复制
数据复制是一种实现数据备份的技术,可以保证存储在不同节点上的同一份数据是一致的。这样当一个节点发生故障后,可以从其他存储该数据的节点获取数据,避免数据丢失,进而提高了系统的可靠性。
在一个分布式系统中,一致性、可用性、分区容错性三者不可兼得。其中,一致性指在分布式系统中所有数据备份在同一时刻的值是否一致;可用性指分布式系统中一部分节点发生故障,集群能否继续响应客户端的读写请求;分区容错性是指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。在实际情况中,网络通信是不可靠的,分布式系统必须具备分区容错性,那么分布式系统必须选择在发生分区后,是中止服务等待数据同步来保证一致性,还是继续提供服务,忽略各个节点可能的数据不一致性。
对于分布式数据库的数据复制技术来讲,需要在一致性和可用性之间做出权衡,一般来说一共有同步复制、异步复制、半同步复制3种数据复制技术。同步复制要求主备节点都完成更新,才告知用户更新成功;异步复制只需要主节点更新成功,便立即返回,不需要等待备节点更新完成;而半同步复制则要求主节点更新完成,并且有一个或半数以上的备节点更新完毕,才返回更新成功。这3类技术都有其合适的使用场景,均广泛应用于分布式数据库中。
3.2 数据分区
单台机器很难应对海量的数据或者很高的并发查询,需要把数据拆分到多个节点上,在多个节点上进行存储和处理,这种技术叫做数据分区也称为数据分片。数据分区的主要目的是提高可扩展性,使数据分散到多个分区,如果对单个分区进行查询,每个节点都只对自己所在的分区进行独立查询。
数据分区有水平分区、垂直分区两种类型,水平分区是将表的内容按照某种规则分散到多个节点上,每个节点包含表的部分数据,比如按照月来切分数据;垂直分区是按照业务将不同的表分布到不同的节点,或者表的不同列放到不同节点。关于分区的方式主要有基于关键字区间分区、基于关键字哈希值分区两种,其中基于关键字区间分区首先对关键字进行排序,每个分区只负责一段范围内的关键字,这种方式能够提供良好的区间查询特性,缺点是会导致热点;基于关键字哈希值分区能够将关键字均匀地分配到多个分区中,每个分区负责一定范围的哈希值,可解决数据倾斜和热点问题,但其区间查询效率较低。
随着时间的推移,数据库的分区面临着负载倾斜、热点等问题,需要进行分区的再度平衡,目前主要有固定数量的分区、动态分区、按节点比例分区等策略可供选择。
3.3 分布式事务
事务主要是ACID,分别代表原子性、一致性、隔离性与持久性。分布式事务是对跨两个或多个数据存储库(尤其是数据库)执行的一组操作。它通常在由网络连接的独立节点之间进行协调,但也可能跨越单个服务器上的多个数据库。经过多年的发展,业界已衍生出多种分布式事务解决方案,比如两阶段提交、TCC方案、基于消息的方案等。两阶段提交是一种在多节点之间实现事务原子提交的算法,用来确保所有节点要么全部提交,要么全部中止[1]。
两阶段提交引入协调者这个新角色,将执行过程分为准备和执行两个阶段[2]。当应用程序准备提交事务时,协调者开启阶段并向所有节点发送一个准备请求,询问他们是否可以提交,并等待参与者的回复。如果所有参与者答复“是”,表明都已经准备好,协调者开启阶段2即执行提交。如果有任何参与者回复“否”,则表示有节点没有准备好,那么协调者在阶段2中向所有节点发送放弃提交的消息。两阶段提交的一次成功执行如图1所示。
参考文献
[1] Philip A. Bernstein, Vassos Hadzilacos. Nathan goodman: concurrency control and recovery in database systems[M]. Addison-Wesley Longman Publishing Co., Inc., 1987.
[2] Samaras G, Britton K, Citron A, et al. Two-phase commit optimizations in a commercial distributed environment[J]. Distributed & Parallel Databases, 1995, 3(4):325-360.
[3] 方意, 朱永强, 宫学庆. 微服务架构下的分布式事务处理[J]. 计算机应用与软件, 2019,36(1):158-164.
[4] 冯雷, 姚延栋, 高小明, 等. Greenplum: 从大数据战略到实现[M]. 机械工业出版社, 2019.
[5] Dale Woodford, Dale Woodford, Dale Woodford, et al. Spanner: becoming a SQL system[C]//Acm International Conference on Management of Data. ACM, 2017.
[6] Corbett J C, Dean J, Epstein M, et al. Spanner: Google’s globally-distributed database[J]. ACM Transactions on Computer Systems, 2012,31(3):8.
[7]JanusGraph. Distributed, open source, massively scalable graph database[EB/OL]. [2020-08-10]. https://janusgraph.org/.
[8] Alexandre Verbitski, Tengiz Kharatishvilli, Xiaofeng Bao, et al. Amazon aurora: on avoiding distributed consensus for I/Os, commits, and membership changes[R]. The 2018 International Conference, 2018.
[9] Dageville, Beno, Cruanes, et al. The snowflake elastic data warehouse[R]. Proceedings of the 2016 International Conference on Management of Data, 2016.
[10] Oracle. Oracle autonomous database technical overview[R/OL]. [2020-08-10]. https://www.oracle.com/cn/a/ocom/docs/database/oracle-autonomous-database- technical-overview.pdf.
[11] Li F. Cloud-native database systems at Alibaba: opportunities and challenges[J]. Proceedings of the VLDB Endowment, 2019,12(12):2263-2272.
作者简介
唐 浩
中国信息通信研究院云计算与大数据研究所综合部主任,研究方向为互联网网络技术和信息技术创新应用,包括新型网络基础设施、大数据技术应用。
姜春宇
中国信息通信研究院云计算与大数据研究所大数据与区块链部副主任,大数据技术标准推进委员会办公室主任,研究方为大数据技术应用、数据库技术、数据资产管理、数据流通。
田稼丰
中国信息通信研究院云计算与大数据研究所大数据与区块链部工程师,大数据技术标准推进委员会数据库工作组副主任,研究方向为数据库、大数据技术。
论文引用格式
唐浩, 姜春宇, 田稼丰. 分布式数据库技术及发展趋势研究[J]. 信息通信技术与政策, 2020(11): 86-90.
本文刊于《信息通信技术与政策》2020年第11期
主办:中国信息通信研究院
《信息通信技术与政策》是工业和信息化部主管、中国信息通信研究院主办的专业学术期刊。本刊定位于“信息通信技术前沿的风向标,信息社会政策探究的思想库”,聚焦信息通信领域技术趋势、公共政策、国家/产业/企业战略,发布前沿研究成果、焦点问题分析、热点政策解读等,推动5G、工业互联网、数字经济、人工智能、区块链、大数据、云计算等技术产业的创新与发展,引导国家技术战略选择与产业政策制定,搭建产、学、研、用的高端学术交流平台。
《信息通信技术与政策》官网开通啦!
为进一步提高期刊信息化建设水平,为广大学者提供更优质的服务,我刊于2020年11月18日起正式推出官方网站,现已进入网站试运行阶段。我们将以更专业的态度、更丰富的内容、更权威的报道,继续提供有前瞻性、指导性、实用性的优秀文稿,为建设网络强国和制造强国作出更大贡献!
点击阅读原文,获取投稿地址http://ictp.caict.ac.cn/
校 审 | 陈 力、珊 珊
编 辑 | 凌 霄
推荐阅读
《新基建》专辑